from flask import Flask
from settings import map_config


def create_app(config_type):
    app = Flask(__name__)
    # 加载项目的配置
    app.config.from_object(map_config.get(config_type))

    # 加载限流器
    from comment.utils.limiter import limiter as lmt
    lmt.init_app(app)  # 将限流器和app关联起来

    # 加载日志处理的工具
    from comment.utils.logging import create_logger
    create_logger(app)

    # 初始化sqlalchemy
    from comment.models import db
    db.init_app(app)  # 和app关联起来以后，sqlalchemy就可以使用app里面的参数了

    # 初始化redis数据库的连接
    from comment.utils.shoppping_redis import redis_client
    redis_client.init_app(app)

    # 加载模块的蓝图
    from shopping.resource.user import user_bp
    from shopping.resource.index import index_bp
    app.register_blueprint(user_bp)
    app.register_blueprint(index_bp)

    # 添加请求钩子
    from comment.utils.requests_wares import jwt_request_authorization
    app.before_request(jwt_request_authorization)
    '''当把请求钩子房子主应用程序里面时，所有的服务器请求都有当前的请求钩子。请求钩子也可以放在蓝图中。
    '''

    return app
